package web.suzy.oj.controller.oj;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import web.suzy.oj.annotation.AnonApi;
import web.suzy.oj.common.result.ResultBean;
import web.suzy.oj.pojo.entity.problem.CodeTemplate;
import web.suzy.oj.pojo.entity.problem.Language;
import web.suzy.oj.pojo.entity.problem.ProblemLanguage;
import web.suzy.oj.pojo.entity.problem.Tag;
import web.suzy.oj.pojo.vo.CaptchaVO;
import web.suzy.oj.pojo.vo.ProblemTagVO;
import web.suzy.oj.service.oj.CommonService;

import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

/**
 * YangSuzy 软件工作室
 * 类名: CommonController
 * 描述: 通用的请求控制器
 * 功能: ---- 待定 -----
 *
 * @author YangSuzy
 * Date: 2022/11/14 12:50
 */
@RestController
@RequestMapping("/api")
public class CommonController {

    @Autowired
    private CommonService commonService;

    /**
     * 方法名: getCaptcha
     * 描述: 获取验证码
     *
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.vo.CaptchaVO>
     * @date 2022/11/14 12:51
     * @auther YangSuzy
     **/
    @GetMapping("/captcha")
    @AnonApi
    public ResultBean<CaptchaVO> getCaptcha() {
        return commonService.getCaptcha();
    }

    /**
     * 方法名: getProblemTagsAndClassification
     * 描述: 获取题目标签和标签分类
     *
     * @return web.suzy.oj.common.result.ResultBean<java.util.List < web.suzy.oj.pojo.vo.ProblemTagVO>>
     * @date 2022/12/11 16:11
     * @auther YangSuzy
     **/
    @GetMapping("/get-problem-tags-and-classification")
    @AnonApi
    public ResultBean<List<ProblemTagVO>> getProblemTagsAndClassification() {
        return commonService.getProblemTagsAndClassification();
    }

    /**
     * 方法名: getAllProblemTagsList
     * 描述: 获取所有标签列表
     *
     * @return web.suzy.oj.common.result.ResultBean<java.util.List < web.suzy.oj.pojo.entity.problem.Tag>>
     * @date 2022/12/11 20:32
     * @auther YangSuzy
     **/
    @GetMapping("/get-all-problem-tags")
    @AnonApi
    public ResultBean<List<Tag>> getAllProblemTagsList() {
        return commonService.getAllProblemTagsList();
    }

    /**
     * 方法名: getProblemTags
     * 描述: 根据题目ID获取题目标签
     *
     * @param pid 题目ID
     * @return web.suzy.oj.common.result.ResultBean<java.util.Collection < web.suzy.oj.pojo.entity.problem.Tag>>
     * @date 2022/12/11 20:56
     * @auther YangSuzy
     **/
    @GetMapping("/get-problem-tags")
    @AnonApi
    public ResultBean<Collection<Tag>> getProblemTags(Long pid) {
        return commonService.getProblemTags(pid);
    }

    /**
     * 方法名: getLanguages
     * 描述: 获取所有编程语言
     *
     * @return web.suzy.oj.common.result.ResultBean<java.util.List < web.suzy.oj.pojo.entity.problem.Language>>
     * @date 2022/12/11 21:14
     * @auther YangSuzy
     **/
    @GetMapping("/languages")
    @AnonApi
    public ResultBean<List<Language>> getLanguages() {
        return commonService.getLanguages();
    }

    /**
     * 方法名: getProblemLanguages
     * 描述: 根据题目ID获取题目支持的语言
     *
     * @param pid 题目ID
     * @return web.suzy.oj.common.result.ResultBean<java.util.Collection < web.suzy.oj.pojo.entity.problem.Language>>
     * @date 2022/12/11 21:48
     * @auther YangSuzy
     **/
    @GetMapping("/get-problem-languages")
    @AnonApi
    public ResultBean<Collection<Language>> getProblemLanguages(@RequestParam("pid") Long pid) {
        return commonService.getProblemLanguages(pid);
    }

    /**
     * 方法名: getProblemCodeTemplate
     * 描述: 根据题目ID获取题目代码模板
     *
     * @param pid 题目ID
     * @return web.suzy.oj.common.result.ResultBean<java.util.List < web.suzy.oj.pojo.entity.problem.CodeTemplate>>
     * @date 2022/12/11 21:59
     * @auther YangSuzy
     **/
    @GetMapping("/get-problem-code-template")
    @AnonApi
    public ResultBean<List<CodeTemplate>> getProblemCodeTemplate(@RequestParam("pid") Long pid) {
        return commonService.getProblemCodeTemplate(pid);
    }
}
